#!/bin/sh
##
## This file is part of the sigrok-util project.
##
## Copyright (C) 2014 Uwe Hermann <uwe@hermann-uwe.de>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, see <http://www.gnu.org/licenses/>.
##

set -e

# Uncomment/set the following to match your cross-toolchain setup.
# TOOLCHAIN=...
# TOOLCHAIN_TRIPLET=...
# C="--host=$TOOLCHAIN_TRIPLET"
# export PATH=$TOOLCHAIN/bin:$PATH

# The path where the compiled packages will be installed.
PREFIX=$HOME/sr

# The path where to download files to and where to build packages.
BUILDDIR=./build

# The path where the libsigrok Python bindings will be installed.
PYPATH=$PREFIX/lib/python2.7/site-packages

# JDK include path. Usually found automatically, except on FreeBSD.
if [ `uname` = "FreeBSD" ]; then
	JDK="--with-jni-include-path=/usr/local/openjdk7/include"
fi

# Edit this to control verbose build output.
# V="V=1 VERBOSE=1"

# Edit this to enable/disable/modify parallel compiles.
PARALLEL="-j 2"

# Edit this to enable/disable building certain components.
BUILD_SIGROK_FIRMWARE_FX2LAFW=1

# Uncomment the following lines to build with clang and run scan-build.
# export CC=clang
# export CXX=clang++
# SB="scan-build -k -v"

# You usually don't need to change anything below this line.

# -----------------------------------------------------------------------------

P="$PREFIX/lib/pkgconfig"
C="$C --prefix=$PREFIX"

# Remove build directory contents (if any) and create a new build dir.
rm -rf $BUILDDIR
mkdir $BUILDDIR
cd $BUILDDIR

GIT_CLONE="git clone --depth=1"

REPO_BASE="git://sigrok.org"

# -----------------------------------------------------------------------------

# libserialport
$GIT_CLONE $REPO_BASE/libserialport
cd libserialport
./autogen.sh
mkdir build
cd build
$SB ../configure $C
$SB make $PARALLEL $V
make install $V
cd ../..

# libsigrok
mkdir -p $PYPATH
$GIT_CLONE $REPO_BASE/libsigrok
cd libsigrok
./autogen.sh
mkdir build
cd build
PKG_CONFIG_PATH=$P $SB ../configure $C $JDK
$SB make $PARALLEL $V
PYTHONPATH=$PYPATH $SB make install $V
$SB make check $V
cd ../..

# libsigrokdecode
$GIT_CLONE $REPO_BASE/libsigrokdecode
cd libsigrokdecode
./autogen.sh
mkdir build
cd build
PKG_CONFIG_PATH=$P $SB ../configure $C
$SB make $PARALLEL $V
make install $V
$SB make check $V
cd ../..

# sigrok-firmware
$GIT_CLONE $REPO_BASE/sigrok-firmware
cd sigrok-firmware
./autogen.sh
mkdir build
cd build
# Nothing gets cross-compiled here, we just need 'make install' basically.
$SB ../configure $C
make install $V
cd ../..

if [ $BUILD_SIGROK_FIRMWARE_FX2LAFW = 1 ]; then
# sigrok-firmware-fx2lafw
$GIT_CLONE $REPO_BASE/sigrok-firmware-fx2lafw
cd sigrok-firmware-fx2lafw
./autogen.sh
mkdir build
cd build
# We're building the fx2lafw firmware on the host, no need to cross-compile.
$SB ../configure $C
make $PARALLEL $V
make install $V
cd ../..
fi

# sigrok-cli
$GIT_CLONE $REPO_BASE/sigrok-cli
cd sigrok-cli
./autogen.sh
mkdir build
cd build
if [ `uname` = "FreeBSD" ]; then
	# Temporary fix for: http://sigrok.org/bugzilla/show_bug.cgi?id=552
	PKG_CONFIG_PATH=$P $SB ../configure $C LDFLAGS=-lusb
else
	PKG_CONFIG_PATH=$P $SB ../configure $C
fi
$SB make $PARALLEL $V
make install $V
cd ../..

# PulseView
$GIT_CLONE $REPO_BASE/pulseview
cd pulseview
mkdir build
cd build
PKG_CONFIG_PATH=$P $SB cmake -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DDISABLE_WERROR=y -DENABLE_TESTS=y -DCMAKE_EXPORT_COMPILE_COMMANDS=y ..
$SB make $PARALLEL $V
make install $V
$SB make test $V
cd ../..
